﻿using Presentacion.Clases.Dto;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using Seg.Logica;
using Seg.Entidades;
using Presentacion.Clases;
using SSEG.UInterfaces;

namespace Presentacion.Controllers.Mantenimiento
{
    public class SistemaController : Base
    {
        //
        // GET: /Sistema/

        public ActionResult Index()
        {
            Init(false);
           
            return View();
        }

        public JsonResult ListarSistemaJQUERY(string nombre,string prefijo,string anulado,string sidx,string sord,int page,int rows)
        {
            SistemaLogica servicio = new SistemaLogica();
            List<DTOSistema> lst = new List<DTOSistema>();

            var sistemas = servicio.Listar(nombre, prefijo, anulado);

            sistemas.ForEach(c =>
            {
                DTOSistema sistemaDTO = new DTOSistema();
                sistemaDTO.CodigoSistema = c.CodigoSistema;
                sistemaDTO.Nombre = c.Nombre;
                sistemaDTO.Descripcion = c.Descripcion;
                sistemaDTO.Prefijo = c.Prefijo;
                sistemaDTO.Anulado = c.Anulado;
                lst.Add(sistemaDTO);
            });

            var count = lst.Count();
            int pageIndex = page - 1;
            int pageSize = rows;
            int totalRecords = count;
            int totalPages = (int)Math.Ceiling((float)totalRecords / (float)pageSize);

            var items = lst.Skip(pageIndex * pageSize).Take(pageSize);

            var result = new
            {
                total = totalPages,
                page,
                records = count,
                rows = (
                    from item in items
                    select new
                    {
                        id = item.CodigoSistema,
                        cell = new string[] { 
                            item.CodigoSistema.ToString(),
                            item.Nombre,
                            item.Descripcion,
                            item.Prefijo,
                            Convert.ToString(item.Anulado == true ? "Inactivo" : "Activo") 
                        }
                    }).ToArray()
            };
            return Json(result, JsonRequestBehavior.AllowGet);
        }

        public JsonResult Insertar(Sistema entidad)
        {
            Resultado resultado = new Resultado();
            try
            {
                if (!isLogout(ref resultado))
                {
                    SistemaLogica servicio = new SistemaLogica();
                    var prefijo = servicio.validarPrefijo(entidad);
                    var flg_val = true;

                    if (prefijo != 0)
                    {
                        resultado.result = 0;
                        resultado.message = Constante.MensajeGenerico.MSG_ERROR_PREFIJO;
                        flg_val = false;
                    }
                    if (flg_val)
                    {
                        servicio.Insertar(entidad);
                        resultado.result = 1;
                        resultado.message = Constante.MensajeGenerico.MSG_OK_GRABAR;
                    }
                }
            }
            catch (Exception ex)
            {
                resultado.result = 0;
                resultado.message = Constante.MensajeGenerico.MSG_ERROR_GENERICO;
                ucLogApp.ucLog.GrabarLogError(NombreAPP, UsuarioActual, "Insertar", ex);
            }

            return Json(resultado, JsonRequestBehavior.AllowGet);
        }

        public JsonResult Actualizar(Sistema entidad)
        {

            Resultado resultado = new Resultado();
            try
            {
                if (!isLogout(ref resultado))
                {
                    SistemaLogica servicio = new SistemaLogica();

                    servicio.Actualizar(entidad);
                    resultado.result = 1;
                    resultado.message = Constante.MensajeGenerico.MSG_OK_GRABAR;
                }
            }
            catch (Exception ex)
            {
                resultado.result = 0;
                resultado.message = Constante.MensajeGenerico.MSG_ERROR_GENERICO;
                ucLogApp.ucLog.GrabarLogError(NombreAPP, UsuarioActual, "Actualizar", ex);
            }


            return Json(resultado, JsonRequestBehavior.AllowGet);
        }

        public JsonResult ObtenerSistema(Sistema entidad)
        {
            Resultado resultado = new Resultado();
            try 
            {
                if (!isLogout(ref resultado))
                {
                    SistemaLogica servicio = new SistemaLogica();
                    DTOSistema sistemaDTO = new DTOSistema();

                    var sistema = servicio.ObtenerSistema(entidad.CodigoSistema);

                    sistemaDTO.CodigoSistema = sistema.CodigoSistema;
                    sistemaDTO.Nombre = sistema.Nombre;
                    sistemaDTO.Descripcion = sistema.Descripcion;
                    sistemaDTO.Prefijo = sistema.Prefijo;
                    sistemaDTO.Anulado = sistema.Anulado;

                    resultado.result = 1;
                    resultado.data = Json(sistemaDTO, JsonRequestBehavior.AllowGet);
                }
            }
            catch (Exception ex)
            {
                resultado.result = 0;
                resultado.message = Constante.MensajeGenerico.MSG_ERROR_GENERICO;
                ucLogApp.ucLog.GrabarLogError(NombreAPP, UsuarioActual, "ObtenerSistema", ex);
            }
            return Json(resultado, JsonRequestBehavior.AllowGet);
        }

        public JsonResult Eliminar(Sistema entidad)
        {
            Resultado resultado = new Resultado();
            try
            {
                if (!isLogout(ref resultado))
                {
                    SistemaLogica servicio = new SistemaLogica();

                    var result = servicio.Eliminar(entidad.CodigoSistema);

                    if (result == 1)
                    {
                        resultado.result = 1;
                        resultado.message = Constante.MensajeGenerico.MSG_OK_ELIMINAR;
                    }
                    else
                    {
                        resultado.result = 0;
                        resultado.message = Constante.MensajeGenerico.MSG_ERROR_ELIMINAR;
                    }
                }
            }
            catch (Exception ex)
            {
                resultado.result = 0;
                resultado.message = Constante.MensajeGenerico.MSG_ERROR_GENERICO;
                ucLogApp.ucLog.GrabarLogError(NombreAPP, UsuarioActual, "Eliminar", ex);
            }
            return Json(resultado, JsonRequestBehavior.AllowGet);
        }

        public JsonResult ListarSistema()
        {
            Resultado resultado = new Resultado();
            try
            {
                List<Sistema> lst = new List<Sistema>();
                SistemaLogica servicio = new SistemaLogica();

                lst = servicio.Listar("", "", "A");
                List<Constante.SelectItems> items = new List<Constante.SelectItems>();

                lst.ForEach(c =>
                {
                    items.Add(new Constante.SelectItems
                    {
                        Valor = Convert.ToString(c.CodigoSistema),
                        Descripcion = c.Nombre
                    });
                });

                resultado.result = 1;
                resultado.data = Json(items, JsonRequestBehavior.AllowGet);
                resultado.message = Constante.MensajeGenerico.MSG_OK_GENERICO;
            }
            catch (Exception ex)
            {
                resultado.result = 0;
                resultado.message = Constante.MensajeGenerico.MSG_ERROR_GENERICO;
                ucLogApp.ucLog.GrabarLogError(NombreAPP, UsuarioActual, "ListarSistema", ex);
            }
            return Json(resultado, JsonRequestBehavior.AllowGet);
        }
        public JsonResult SistemaAutoCompletar()
        {
            Resultado resultado = new Resultado();

            string descripcion = Request.QueryString["term"];
            var datos = new SistemaLogica().SistemaAutoCompletar(descripcion);
            List<DTOSistema> sistemas = new List<DTOSistema>();

            if (!isLogout(ref resultado))
            {
                datos.ForEach(c =>
                {
                    sistemas.Add(new DTOSistema
                    {
                        Code = c.CodigoSistema,
                        value = string.Format("{0} - {1}", c.Prefijo, c.Nombre)
                    });
                });
            }
            return Json(sistemas, JsonRequestBehavior.AllowGet);
        }
    }
}
